﻿
layui.define(function (exports) {
    var $ = layui.$
        , layer = layui.layer
        , table = layui.table;

    /**
     * ajax 错误返回处理
     * @param {any} err
     */
    function ajax_error(err) {
        console.log(err);
        //模型验证失败
        if (err.status == 400) {
            layer.alert(err.responseJSON.result.toString(), {icon:2})
        }
        //未登录
        else if (err.status == 401) {
            window.localStorage.removeItem("token");
            window.localStorage.removeItem("currentUser");
            window.location.href = login;
        }
        //无权限
        else if (err.status == 402) {
            layer.alert(err.responseJSON.ErrorMsg, { icon: 2 })
        }
        //其他错误
        else {
            layer.msg("调用API失败，请联系开发人员!");
        }
    }

    /**
     * table 渲染封装
     * @param {any} data
     */
    function table_rander(data) {
        table.render({
            elem: data.elem
            , height: data.height ?? 'full-25'  //设定容器高度
            , url: data.url ?? '' //数据接口
            , method: data.method ?? 'get'  //接口http请求类型，默认：get
            , headers: { Authorization: window.localStorage.getItem('token') }
            , request: {
                pageName: 'pageIndex' //页码的参数名称，默认：page
                , limitName: 'pageSize' //每页数据量的参数名，默认：limit
            }
            , response: {
                statusName: 'code' //规定数据状态的字段名称，默认：code
                , statusCode: 1 //规定成功的状态码，默认：0
                , msgName: 'errorMsg' //规定状态信息的字段名称，默认：msg
                , countName: 'total' //规定数据总数的字段名称，默认：count
                , dataName: 'result' //规定数据列表的字段名称，默认：data
            }
            , where: data.where ?? {} //接口的其它参数。如：where: {token: 'sasasas', id: 123}
            , error: function (res, msg) {
                console.log(res);
                if (res.status == 402) {
                    layer.alert(res.responseJSON.ErrorMsg, {icon:2})
                }
            }
            , page: data.page ?? true //开启分页
            , cols: data.cols ?? null   //设置表头。值是一个二维数组。方法渲染方式必填
            , toolbar: data.toolbar ?? null //开启表格头部工具栏区域，该参数支持四种类型值
            , defaultToolbar: data.defaultToolbar ?? null   //	该参数可自由配置头部工具栏右侧的图标按钮
            , cellMinWidth: data.cellMinWidth ?? 60   //全局定义所有常规单元格的最小宽度（默认：60）
            , done: data.done ?? function (res, curr, count) { } //数据渲染完的回调。你可以借此做一些其它的操作
            , escape: data.escape ?? false   //	是否开启 xss 字符过滤（默认 false）
            , totalRow: data.totalRow ?? false   //是否开启合计行区域
            , limit: data.limit ?? 20   //每页显示的条数（默认 20）
            , limits: data.limits ?? [20, 50, 100] //每页条数的选择项
            , loading: data.loading ?? true //是否显示加载条（默认 true）
            , title: data.title ?? ''   //定义 table 的大标题（在文件导出等地方会用到）
            , text: data.text ?? { none: '暂无数据' } //自定义文本，如空数据时的异常提示等。
            , autoSort: data.autoSort ?? true   //默认 true，即直接由 table 组件在前端自动处理排序。若为 false，则需自主排序，即由服务端返回排序好的数据
            , initSort: data.initSort ?? {}   //初始排序状态。
            , id: data.id ?? null   //设定容器唯一 id
            , skin: data.skin ?? null    //用于设定表格风格，若使用默认风格不设置该属性即可
            , even: data.even ?? false //若不开启隔行背景，不设置该参数即可
            , size: data.size ?? null //用于设定表格尺寸，若使用默认尺寸不设置该属性即可
        });
    }

    exports('comment', {
        //当前登录用户
        currentUser: JSON.parse(window.localStorage.getItem("currentUser"))

        /**
         * Ajax 封装方法
         * */
        , _ACP: function (paras, data, action, isAsync = false) {
            var contentType = 'application/json;charset=UTF-8';
            $.ajax({
                headers: {
                    Authorization: window.localStorage.getItem('token'),
                },
                contentType: contentType,
                url: paras.url,
                dataType: 'json',
                type: paras.method,
                async: isAsync,
                data: data,
                success: action,
                error: function (err) { ajax_error(err) },
            })
        }

        /**
         * table渲染封装
         * @param {any} data
         */
        , Table_Rander: function (data) {
            table_rander(data)
        }

        //验证权限隐藏元素
        , CheckPermission: function () {
            var currentUserString = window.localStorage.getItem("currentUser");
            var currentUser = JSON.parse(currentUserString);
            if (currentUser.roleNames.indexOf("超级管理员") == 0)
                return;
            let power_show = $('.power-show');
            if (power_show.length > 0) {
                $.each(power_show, function (i, item) {
                    let menuCode = $(item).attr("lay-menu-code")
                    $.each(menuCode.split(','), function (index, code) {
                        if (currentUser.powerList.indexOf(code) == -1) {
                            $(item).hide();
                        }
                    })
                });
            }
        }

        //成功提醒
        , Success: function (msg) {
            layer.msg(msg, { icon: 1 });
        }

        //失败提醒
        , Error: function (msg) {
            layer.msg(msg, { icon: 2 });
        }

        //初始化气泡
        , InitTips: function () {
            $('.lanbt-tips').hover(function () {
                var value = $(this).attr('title');
                layer.tips(value, this, {
                    tips: [1, '#3595CC'],
                    time: 2000
                });
            })
        }

        , SignOut: function (callBack) {
            _ACP(ApiUrl.Home.signOut, {}, function (res) {
                if (res.success) {
                    callBack();
                } else {
                    Error(res.errorMsg);
                }
            })
        }
    });

})